home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Aminet 52
/
Aminet 52 (2002)(GTI - Schatztruhe)[!][Dec 2002].iso
/
Aminet
/
docs
/
mags
/
saku06.lha
/
txt
/
ohjelmointi.A
< prev
next >
Wrap
Text File
|
1992-09-02
|
8KB
|
177 lines
9
1
*
{2Amigan ohjelmoinnista · Tomi Jaskari 26.4.1994
{6lähdeteos: "Programmer's Guide to the Amiga" · Robert A. Peck
{6oikolukija: Kimmo Mustonen
{5Mitä Amiga-ohjelmoija tarvitsee
Taidot ja ohjelmistot, joita Amiga-ohjelmoinnissasi tulet tarvitsemaan,
ovat paljolti riipuvaisia siitä, millaista sovellusohjelmaa olet
kehittämässä. Saatat esimerkiksi olla laatimassa upeasti soivaa ja
värikästä ohjelmaa, joka hyödyntää Amigassa valmiiksi olevia ääni- ja
grafiikkaominaisuuksia, jolloin sinun tulee tietää, miten laadit
tietorakenteet kuville ja ääninäytteille, sekä miten avaat tarvittavat
kirjastot ja mitä kutsuja tarvitset mihinkin tarkoitukseen.
Tai haluat mahdollisesti käyttää moniajoa todella hyväksesi, ehkäpä
tulostaen tiedoston kirjoittimelle samalla korjaillessasi toista tiedostoa
ja siinä ohella vielä tausta-ajona ladata sähköpostia koneeseesi jostain
maailmalta. Tähän tarvitset tietoa moniajosta tai vähimmäisvaatimuksena
sinun tulee tietää, miten pyydät AmigaDossia aloittamaan uuden erillisen
prosessin sinua varten.
Yleistäen sinun pitäisi tuntea komentotulkin eli CLIn toiminta ja
moniajoytimen EXECin toiminta niiden systeemiohjelmistojen lisäksi, joita
sovelluksesi ohjelmoiminen vaatii, koskapa jokainen sovellus vaatii pienen
määrän kirjanpitotyötä ennen kuin voit käyttää grafiikkaa tai mitä tahansa
muuta systeemifunktiota Amigan kirjastoista.
{5Funktiokirjastot
Kirjasto (library) on kokoelma funktioita, jotka liittyvät toisiinsa
jollakin tavoin. Amigan suunnittelijat keräsivät toisiinsa liittyvät
funktiot kirjastoihin varmistaakseen, että yhtä Kickstart-versiota varten
kirjoitetut ohjelmat olisivat mahdollisimman yhteensopivia myös uudemmissa
Amigoissa. Mahdollistaakseen tämän yhteensopivuuden suunnittelijoiden oli
varmistettava, että ohjelman koodista pystyisi aina löytämään systeemin
funktiot vaikka käyttöjärjestelmä olisi sitten muuttunut versiosta X
versioon Y.
[ Tältä pohjalta on hyvä lähteä siirtämään Amigan käyttöjärjestelmää
Kickstartteineen aivan uuteen tietokonearkkitehtuuriin. ]
Saavuttaakseen tämän yhteensopivuustavoitteen suunnittelijat määrittelivät
tietorakenteen, joka muiden asioiden lisäksi sisältää taulukon
hyppykäskyistä ja funktioiden osoitteista seuraavasti:
{5 HYPPY funktioon N
{5 ... ...
{5 HYPPY funktioon 3
{5 HYPPY funktioon 2
{5 HYPPY funktioon 1
{5 LibBase <kirjaston alkuosoite muistissa>
{5 <tietorakenteen loppuosa>
Kun kytket Amigaasi virran, eri systeemikirjastot etsitään
Kickstart-muistista ja tehdään niiden osoitteista kutsutaulukko
RAM-muistiin, jossa taulukkoa voidaan tarpeen vaatiessa myöhemmin muuttaa.
Systeemin käynnistyessä kirjastot voidaan sijoittaa vapaasti muistissa
mihin tahansa osoitteeseen. Siksipä koodisi tulee määritellä tietty
muuttujanimi - kirjaston perusosoitin (the library base address), jonka
avulla voit sitten kutsua tietyn systeemikirjaston funktioita.
{5Avauskoodiesimerkki
Pieni esimerkki siitä miten osoitetaan intuition-kirjastoa, missä
IntuitionBase on perusosoitin Intuition-kirjastoon:
{5 #include "exec/types.h"
{5 #include "intuition/intuition.h"
{5 #include "intuition/intuitionbase.h"
{5 struct Intuitionbase *Intuitionbase; /* must be global */
{5 extern struct Library *OpenLibrary();
{5 main()
{5 {
{5 Intuitionbase = (struct IntuitionBase *)
{5 OpenLibrary("intuition.library",0);
{5 if (IntuitionBase = = 0)
{5 {
{5 printf("Intuition won't open!\n");
{5 }
{5 /* more program material */
{5Linkkeri liittää ohjelmaasi koodia..
Kääntäessäsi ohjelman linkkeri yhdistää sen tiedostoon Amiga.lib, jossa on
tarvittavat liitynnät funktiokirjastoihin ohjelmaasi varten. Kun kutsut
kirjaston funktiota tapahtuu Amiga.libin toimesta seuraavaa:
· rekisterit talletaan, jotta funktion palatessa niiden arvot
voidaan palauttaa
· ladataan rekisteriin sen kirjaston perusosoitin, jossa funktio sijaitsee
· asettaa rekistereihin tarvittavat kutsuparametrit
· hypätään perusosoittimen ja tietyn funktion paikan kertovan siirtymäarvon
eli offsetin avulla varsinaisen funktion koodiin
· palauttaa rekistereihin niiden arvot ennen funktiokutsua
· antaa tarvittaessa paluuarvon
Jos jostain syystä epäonnistut funktion kirjaston nimen julkistamisessa,
linkkeri kertoo sinulle suunnilleen seuraavasti:
{5 _<someLibBase> undefined
Jos saat kirjaston perusosoittimen muuttujan julkistettua, mutta
epäonnistut avaamiskutsussa ja silti yrität käyttää kyseisen kirjaston
funktioita, ohjelmasi kaatuu.
Jos onnistut sekä määrittelemään kirjaston perusosoitteen, että avaamaan
sen pitäisi kirjastofunktioiden osoittamisen sujua sen jälkeen hienosti.
Amiga ROM Kernel Manuaalin A-liitteessä luetellaan perusosoittimien ja
kirjastojen nimet, joihin ne yhdistetään. Jos unohdat niin Amiga-linkkeri
kyllä kertoo mitkä kirjastot pitää julkaista ja avata.
Käynnistyskoodi, jonka olet liittänyt linkkerillä ohjelmaasi, avaa
automaattisesti exec.libraryn ja dos.libraryn. Näin voit kutsua AmigaDOSin
ja EXECin funktioita avaamatta niitä erikseen omassa ohjelmassasi.
{5C-ohjelmointi
Amigalle on useita C-kääntäjiä, joista paras kaupallinen on ehdottomasti
SAS 6.50 C(++) ja paras shareware kääntäjä lienee Matt Dillonin DICE.
Lisäksi on ainakin GNU-projektin C-kääntäjä, joka on yhteensopiva mutta
hidas saamieni tietojen mukaan. Näistä ainakin kaksi ensin mainittua
sisältävät täyden tuen Amigan määrittelytiedostoille eli niin sanotuille
include-fileille. Lisäksi systeemin käyttämät tietorakenteet on helppo
määritellä C-kielellä, ja suurin osuus Amigan käyttöjärjestelmästä on sitä
paitsi käännetty C-lähdekoodista.
Kun käytät C:tä, Pascalia tai mitä tahansa muuta korkean tason
ohjelmointikieltä, tulet yhdistämään korkean tason koodisi funktioihin,
jotka mukauttavat käyttämäsi kielen parametrinvälitystavat Amigan
systeemikoodiin käyttämään parametrinvälitystapaan.
{5Assembler-ohjelmointi
Jos käytät assemblykoodia kutsuaksesi systeemin funktioita, sinun tulisi
ensin tuntea Amigan käyttötavat 68000 rekistereille; ensinnäkin rekisterit
D0, D1, A0 ja A1 ovat aina vapaasti käytössä eli toisin sanoen mikä tahansa
systeemifunktio saattaa muuttaa niiden arvoa palauttamatta alkuperäistä.
Kaikkien muiden rekistereiden sisällöt systeemi tallettaa ja palauttaa
pinon avulla. Eli paljon aliohjelmakutsuja käyttävä ohjelma tarvitsee ison
pinon!
Funktiot, jotka palauttavat jonkin arvon, palauttavat sen rekisterissä D0.
Jos funktiosi pitää palauttaa useampi arvo, tulee sinun suunnitella koodisi
palauttamaan osoite tietorakenteeseen, joka sisältää taulukon tuloksista.
{5SysBase ja Stack Pointer
Motoralan mikroprosessorisarjan MC680x0 osoiterekistereistä kaksi on
Amigassa varattu erikoiskäyttöön:
A6-rekisteriä ei koskaan käytetä parametrien välittämiseen. A6 on nimetty
SysBaseksi. Se sisältää osoitteen systeemifunktioden vektoritaulukkoon,
joka puolestaan sisältää voimassa olevat osoitteet muihin funtioihin.
Funktiota kutsuttaessa, keskusyksikkö siirtyy suorittamaan funktiota tästä
vektoritaulukosta saamansa osoitteen kautta, joten ohjelmoija voi
halutessaan muuttaa vektoritaulukon sisältämiä systeemifunktioiden
osoitteita eri tarkoituksia varten. Esimerkiksi funktioiden toimintaa
voidaan tehostaa tai lisätä analysointi- ja/tai profilointikoodia ohjelman
suorituksen tarkempaa tutkimista varten. Tämä on vain Amigaa koskeva
piirre.
Toinen erikoisesti kohdeltava rekisteri on A7; se on samalla SP eli Stack
Pointer, jonka avulla osoitetaan pinoon talletettua dataa. Tämä koskee
kaikkia MC680x0 sarjaan pohjautuvia tietokoneita.
{6 - TMJJ -- tänään mietin jumalattomia juonia -